#pragma once

namespace pb { namespace cfg {

    class Config;

    class CfgMgr
    {
    private:
        CfgMgr();
        ~CfgMgr();
        
    public:
        static CfgMgr* get();        
        
        // Load the config file. If failed, return null.
        //
        Config* loadCfg(const std::wstring& filePath);

        // Unload the config file.
        // Note: After calling this function, the config pointer is null.
        //
        void unloadCfg(Config*&);

        // Save the config file.
        //
        void saveCfg(Config*);

        // New a config file on the disk.
        //
        Config* newCfg(const std::wstring& filePath);
        
    private:
        typedef std::map<std::wstring, Config*> CfgSet;
        
        CfgSet  m_cfgSet;
    };

}}